## bot

This program is an IRC bot written in golang.  Its development
started as a clone of
[autimaat](https://github.com/monkeybird/autimaat), aka Jeeves. Changes since
cloning:

-  removed code not in use
-  fixed weather
-  fixed youtube titles
-  extended reminder plugin
-  improved help command


## First use

Start with creating a new profile directory and configuration file:

	$ bot -new /path/to/profile

Edit the newly created configuration file to your liking:

	$ nano /path/to/profile/profile.cfg

Relaunch the bot to use the new profile:

	$ bot /path/to/profile

In order to have the bot automatically re-launch after shutdown, an external
supervisor like systemd is required. The bot will create a PID file at
`/path/to/profile/app.pid`, in case the supervisor requires it.

The bot will fork itself once, after it has been launched. This is done
to play nice with things like systemd. Manually forking the bot can be done
through the command:

	$ kill -s USR1 `pidof bot`

This tells the bot to fork itself, while passing along any existing
connections. The old process then shuts itself down. This mechanism allows
the bot to be binary-patched, without downtime.


### Weather plugins

The `owm` plugin provides bindings for a weather related API.  The
service requires registration of an account in order to get the needed
API key: [ https://home.openweathermap.org/users/sign_up](https://home.openweathermap.org/users/sign_up).
The key should be put in `weather.cfg`. Furthermore, the `knmi` plugin
needs an URL to the KNMI FTP site. This URL is also read from
`weather.cfg`.

Thus an example `weather.cfg` could be:

    {
      "OwmAPIKey": "xxxxxxxxxxxxxxxxxxx",
      "ForecastURL": "ftp://ftp.knmi.nl/path/to/forecast.xml"
    }

### URL plugin

The `url` plugin uses the `YouTube Data API v3` to fetch playback durations
for videos being linked in a channel. This API requires the registration of
a Google Developer API key at: [https://console.developers.google.com/apis](https://console.developers.google.com/apis)

The API key you receive should be assigned to the `YoutubeApiKey` field in
the bot profile.

The key should put in a separate `url.cfg` file, with the following contents:

	{
	  "YoutubeApiKey": "xxxxx"
	}


## Versioning

The bot version is made up of 3 numbers:

* Major version: This number only changes if the bot itself changes in
  a way that makes it incompatible with previous versions. Changes to
  the format of configuration files increment this number.  Changes to
  the way user commands are implemented do not.
* Minor version: This number changes whenever functionality changes without
  breaking backward compatibility. For example user commands are added/removed.
* Revision: This is the unix timestamp of the last commit.  This number changes
  whenever any kind of change occurs in any of the code. Including small bug
  fixes.  This number is updated through a go build flag in the included
  Makefile. 


## String translations

The output of the bot to IRC channels/users is done in a specific language.
Translations for all used strings can be found in the various `strings.go` files,
included in all plugins, as well as the `cmd` package. Basically, you should
`find . -name strings.go` to get them all. Then edit them as needed.


## License

Unless otherwise noted, the contents of this project are subject to a
1-clause BSD license. Its contents can be found in the enclosed LICENSE file.


## SSL connections

The bot is not SSL aware. SSL connections can be created with the help
of the [stunnel](https://www.stunnel.org) tool.  Configure stunnel to
connect to the SSL port of the IRC server. Let it serve on some local
port.  Then configure the bot to connect to the local port. On my
debian server this is a working /etc/stunnel/stunnel.conf:

    setuid = stunnel4
    setgid = stunnel4
    pid = /var/run/stunnel4/stunnel.pid
    output = /var/log/stunnel4/stunnel.log
    
    [sirc]
    client = yes
    accept = 127.0.0.1:6667
    connect = ssl.ircserver.net:6697

